package main

import (
	"fmt"
)

// 第一题：有4个数字1、2、3、4，能组成多少个不重复的3位数，请打印出来。要求这个3位数不同位不能使用相同数字，例如112、212就不可以。
func threeNumber(slice []int, current []int, used []bool, result *[][]int) {
	if len(current) == 3 {
		temp := make([]int, 3)
		copy(temp, current)
		*result = append(*result, temp)
		return
	}
	for i := 0; i < len(slice); i++ {
		if used[i] {
			continue
		}
		used[i] = true
		current = append(current, slice[i])
		threeNumber(slice, current, used, result)
		current = current[:len(current)-1]
		used[i] = false
	}
}

func main() {
	slice := []int{1, 2, 3, 4}
	used := make([]bool, len(slice))
	result := [][]int{}

	threeNumber(slice, []int{}, used, &result)

	// 打印所有生成的3位数
	for _, perm := range result {
		fmt.Println(perm[0]*100 + perm[1]*10 + perm[2])
	}
	fmt.Printf("符合要求的数一共有：%d个\n", len(result))
}
